#pragma once
#ifndef PARAMETERS_H_
#define PARAMETERS_H_
#include <string>
enum DynamicsTypes
{
    kMd = 0,
    kPimd = 1,
    kLscivr = 2,
    kDynamicsSize
};
enum EnsembleTypes
{
    kNve = 0,
    kNvt = 1,
    kNpt = 2,
    kEnsembleSize
};
enum NveMethods
{
    kLeapFrog = 0,
    kVelocityVerlet = 1,
    kNveSize
};
enum NvtMethods
{
    kLeapFrogMiddle = 0,
    kVelocityVerletMiddle = 1,
    kNvtSize
};
enum NptMethods
{
    kLeapFrogNpt = 0,
    kNptSize
};
enum BathMethods
{
    kLangevin = 0,
    kAndersen = 1,
    kNoseHooverChain = 2,
    kBerendsen = 3,
    kBathSize
};
enum BaroMethods
{
    kAndersenBaro = 0,
    kNHCBaro = 1,
    kBerendsenBaro = 2,
    kBaroSize
};
enum ForceTypes
{
    kLennardJones = 0,
    kForceTypeSize
};
extern DynamicsTypes gDynamicsType;
extern EnsembleTypes gEnsembleType;
extern NveMethods gNveMethod;
extern NvtMethods gNvtMethod;
extern NptMethods gNptMethod;
extern BathMethods gBathMethod;
extern BaroMethods gBaroMethod;
extern ForceTypes gForceType;
extern std::string gAtomName; // for demo
extern int gNatoms; // for demo
extern double gLjSigma;
extern double gLjEpsilon;
extern bool gIsPeriodic; // whether periodic boundary conditions are employed
extern double gBoxLength;
extern int gNbeads;
extern long int gNsteps;
extern double gTemperature;
extern double gTimeStep;
extern double gBathParameter;
extern bool gIsVelocRead;
extern bool gIsCoordRead;
extern long int gNstepsWrite;
extern std::string gMolFileRead;
extern std::string gMolFileWrite;
void ReadParameters(const std::string &filename);
void WriteParameters(const std::string&filename);

#endif
